package com.bw.controller;

import com.alibaba.fastjson.JSON;
import com.bw.common.JwtUtils;
import com.bw.common.Md5Utils;
import com.bw.entity.User;
import com.bw.service.UserService;
import org.spring.kun.common.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.List;

@Controller
public class LoginController {


    @Autowired
    UserService userService;


    /**
     * 返回一个登录页面
     *
     * @return
     */
    @RequestMapping("/loginPage.do")
    public String loginPage() {

        return "login";
    }


    /**
     * 客户端和服务端进行数据的交互
     * 1. 接收数据
     * 2. 返回数据
     * 参数的绑定
     * 执行登录
     * 请求的URL 后面的参数   赋值到  controller 方法的入参里
     *
     * @return
     */
    @RequestMapping("/login.do")
    public String doLogin(User loginUser, Model model, HttpServletRequest request, HttpServletResponse response) {
        String agent = request.getHeader("User-Agent");
        System.out.println("浏览器传过来的数据agent = " + agent);
        System.out.println(" 接收到用户登录的入参" + JSON.toJSONString(loginUser));

        String loginUserName = loginUser.getName();
        // 见名知意
        User userFromDB = userService.selectByName(loginUserName);

        if (userFromDB == null) {
            String error = "用户名不存在";
            // 把错误信息放入jsp页面
            model.addAttribute("error", error);
            return "login"; // jsp页面的名字
        }

        String loginUserPassword = loginUser.getPassword(); // 用户输入的密码 123
        String password = userFromDB.getPassword();// 数据库乱码  beb6b72231daafe7d913baa818a63f0c
        String salt = userFromDB.getSalt(); // 数据库里的盐  qwer
        // 加密 用户输入的密码 +  数据库里的盐
        String md5String = Md5Utils.getMD5String(loginUserPassword + salt);

        if (!md5String.equals(password)) { // 如果这两个乱码不相等 则输入的密码错误
            // 把错误信息放入jsp页面
            model.addAttribute("error", "密码错误");
            return "login"; // jsp页面的名字
        }


        // 加密 数据库查出的用户信息   制作token令牌
        // 加密用户信息   得到token 把token放入cookie
        TokenUtils.responseTokenByCookie(userFromDB,response);

        //登录成功 把用户信息放入session  cookie
//        HttpSession session = request.getSession();
//        session.setAttribute("login",userFromDB);

        model.addAttribute("msg", "欢迎" + userFromDB.getName() + "登录");
        // 重定向 ： 告诉浏览器  接下来去访问list.do
        return "redirect:list.do";  // 这个返回不再是一个jsp页面
    }

    @RequestMapping("/list.do")
    public String list(Model model) {
        List<User> list = userService.selectList();

        model.addAttribute("list", list);

        return "list";
    }

}
